In the field of client/server computing systems, some server software may not be multi-threaded. In such cases the server software does not allow another process to make multiple simultaneous calls to it. This is a limitation of single-threaded client/server software. Hence, remote clients need their own connection into the server software, with either a disproportionate amount of the work being done on the client, or wasteful duplication of processes being executed on the server.
The problem is compounded when the server software is session-oriented, that is, the work currently being performed depends upon the history of the previous work done. This requires not only that the server software service all the clients simultaneously, but it must also know exactly what has been done by each client.
A more difficult problem is that clients are continuously making requests to the server and each request is disjoint from that server's point of view.